package com.test.template.tool;


import org.apache.commons.lang3.StringUtils;

public class Tool {
    /**
     * 下标endpoint前的所有字符转换为大写
     *
     * @param input
     * @param endpoint
     * @return
     */
    public static String toUpperCase(String input, int endpoint) {
        if (input == null || input.isEmpty()) {
            return input;
        }
        if (endpoint < 0 || endpoint >= input.length()) {
            return input;
        }
        // 将首字母转换为大写
        return input.substring(0, endpoint).toUpperCase() + input.substring(endpoint);
    }

    /**
     * 下标endpoint前的所有字符转换为大写
     *
     * @param input
     * @param endpoint
     * @return
     */
    public static String toLowerCase(String input, int endpoint) {
        if (input == null || input.isEmpty()) {
            return input;
        }
        if (endpoint < 0 || endpoint >= input.length()) {
            return input;
        }
        // 将首字母转换为小写
        return input.substring(0, endpoint).toLowerCase() + input.substring(endpoint);
    }



    /**
     * 从最后一次出现punctuation字符串开始，将字符串分割成两份，取后半部分
     * 可以用于分割包名，获取变量变量名称
     * 使用场景：java.lang.Integer,需要获取Integer的时候
     *
     * @param input
     * @param punctuation
     * @return
     */
    public static String subStringAfterLastPunctuation(String input, String punctuation) {
        int index = input.lastIndexOf(punctuation);
        if (index == -1) {
            return input;
        } else {
            return input.substring(index + punctuation.length());
        }
    }

    /**
     * 从最后一次出现punctuation字符串开始，将字符串分割成两份，取后半部分,迭代n次
     * 可以用于分割包名，获取变量变量名称
     * 使用场景：java.lang.Integer,需要获取Integer的时候
     * sample:
     *  - Tool.subStringAfterLastPunctuation(poPackage, ".", 1);得到Integer
     * @param input
     * @param punctuation
     * @param count
     * @return
     */
    public static String subStringAfterLastPunctuation(String input, String punctuation, int count) {
        int index = StringUtils.ordinalIndexOf(input, punctuation, count);
        if (index == -1) {
            return input;
        } else {
            return input.substring(index + punctuation.length()); // 增加punctuation的长度
        }
    }

    /**
     * 从最后一次出现punctuation字符串开始，将字符串分割成两份，取前半部分,迭代count次
     * 可以用于分割包名，仅获取包名
     * sample:
     *  Tool.subStringBeforePunctuationCount(poPackage, ".", 1);
     * 使用场景：com.elecbook.content.model.po.Contribute,
     * 需要获取com.elecbook.content.model.po的时候（此时count填写1)
     * 或者是需要获取com.elecbook.content.model的时候（此时count填写2）
     *
     * 边界条件：
     * -如果count=0，则触发index=-1，返回原始串
     *
     * @param input
     * @param punctuation
     * @return
     */
    public static String subStringBeforePunctuationCount(String input, String punctuation, int count) {
        int index = StringUtils.lastOrdinalIndexOf(input, punctuation, count);
        if (index == -1) {
            return input;
        } else {
            return input.substring(0, index);
        }
    }
}
